System.Nullable<T> 構造体
この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。
Nullable クラスは、null
割り当てることができる値型を表します。
型は、値を割り当てることができるか、 null
割り当てることができる場合は null 許容と言われます。つまり、型に値がまったくないことを意味します。 既定では、 Stringなどのすべての参照型は null 許容ですが、 Int32など、すべての値型は null 許容ではありません。
C# と Visual Basic では、値型の後に ?
表記を使用して、値型を null 許容としてマークします。 たとえば、C# または Visual Basic のInteger?
でint?
は、null
割り当てることができる整数値型を宣言します。
Nullable<T>構造体では、参照型は設計上 null 許容であるため、null 許容型として値型のみを使用できます。
Nullable クラスは、Nullable<T>構造体の補完的なサポートを提供します。 Nullable クラスは、null 許容型の基になる型の取得と、基になる値型がジェネリック比較および等値演算をサポートしていない null 許容型のペアに対する比較および等価演算をサポートします。
基本的なプロパティ
Nullable<T>構造体の 2 つの基本的なメンバーは、HasValueプロパティとValue プロパティです。 Nullable<T> オブジェクトのHasValue プロパティがtrue
されている場合は、Value プロパティを使用してオブジェクトの値にアクセスできます。 HasValue プロパティがfalse
されている場合、オブジェクトの値は未定義であり、Value プロパティにアクセスしようとするとInvalidOperationExceptionがスローされます。
ボックス化とボックス化解除
null 許容型がボックス化されると、共通言語ランタイムは、Nullable<T> オブジェクト自体ではなく、Nullable<T> オブジェクトの基になる値を自動的にボックス化します。 つまり、 HasValue プロパティが true
されている場合、 Value プロパティの内容はボックス化されます。 null 許容型の基になる値がボックス化解除されると、共通言語ランタイムは、基になる値に初期化された新しい Nullable<T> 構造体を作成します。
null 許容型の HasValue
プロパティが false
場合、ボックス化操作の結果は null
。 したがって、ボックス化された null 許容型がオブジェクト引数を必要とするメソッドに渡される場合、そのメソッドは、引数が null
された場合を処理するように準備する必要があります。 null
が null 許容型にボックス化解除されると、共通言語ランタイムは新しいNullable<T>構造体を作成し、そのHasValue
プロパティを初期化してfalse
します。
Windows ランタイム コンポーネント
Nullable<T>型は、WinMD ライブラリにエクスポートされた構造体のメンバーとして含めることができます。
.NET